package com.xinke.juc.sguigu.case02;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @Author：xinke
 * @Date：2025/10/9
 * @Desc: Future接口常用实现类FutureTask异步任务
 * Future是Java5新加的一个接口，它提供一种异步并行计算的功能，如果主线程需要执行一个很耗时的计算任务，
 * 我们会就可以通过Future把这个任务放进异步线程中执行，主线程继续处理其他任务或者先行结束，再通过Future获取计算结果。
 * ● 目的：异步多线程任务执行且返回有结果，三个特点：多线程、有返回、异步任务（班长为老师去买水作为新启动的异步多线程任务且买到水有结果返回）
 * ● 代码实现：Runnable接口+Callable接口+Future接口和FutureTask实现类。
 */
@Slf4j
public class C01_FutureTask {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<>(new MyFutureTask());
        Thread t1 = new Thread(futureTask); // 开启一个异步线程
        t1.start();
        log.info(futureTask.get()); // 有返回 hello FutureTask
    }
}

@Slf4j
class MyFutureTask implements Callable<String> {
    @Override
    public String call() throws Exception {
        log.info("......come in");
        return "hello FutureTask";
    }
}